package recherche;

import java.util.ArrayList;
import java.util.Scanner;

import modex.Paragraphe;

import parser.ParserTermeHandler;
import sparql.SparqlClient;
import sparql.SparqlClientExample;

public class MainRecherche {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		Scanner scanner = new Scanner(System.in);
		ArrayList<String> synonymes = null;
		ArrayList<String> sousClasses = null;
		ArrayList<String> instances = null;
		ArrayList<Paragraphe> paras = null;
		ArrayList<Paragraphe> parasOntologie = null;
        
        ModuleRecherche moduleRecherche = new ModuleRecherche();
        SparqlClient sparqlClient = new SparqlClient("localhost:3030/space");
        
		// Récupération requête
    	String query;
    	do{
    		System.out.println("Veuillez saisir votre requête :");
    		query = scanner.nextLine();
    	}while(query.isEmpty()); 
    	
    	String[] queryWords = query.split(" ", -1);
    	String queryOntologie = "";

    	String upQuery = "ASK WHERE { ?s ?p ?o }";
        boolean serverIsUp = sparqlClient.ask(upQuery);
		if (serverIsUp) {
			System.out.println("service is UP");
			
			for (String word : queryWords) {
				sousClasses = SparqlClientExample.getSubTypes(sparqlClient, word);
		    	synonymes = SparqlClientExample.getSynonymes(sparqlClient, word);
		    	instances = SparqlClientExample.getInstances(sparqlClient, word);
		    	
		    	for (String s : synonymes){
		    		if (!queryOntologie.contains(s)) {
		    			queryOntologie += " " + s;
		    		}
		    	}
		    	for (String s : sousClasses){
		    		if (!queryOntologie.contains(s)) {
		    			queryOntologie += " " + s;
		    		}
		    	}
		    	
		    	for (String s : instances){
		    		if (!queryOntologie.contains(s)) {
		    			queryOntologie += " " + s;
		    		}
		    	}
			}
	    	
		} else {
			System.out.println("service is DOWN");
		}

    	// Exécution de la requête
		System.out.println("Exécution de la requête pour : "+query);
    	paras = moduleRecherche.executeQuery(query);
    	System.out.println();
    	System.out.println("Exécution de la requête pour : "+queryOntologie);
    	parasOntologie = moduleRecherche.executeQuery(queryOntologie);

	}

}
